#include <iostream>
using namespace std;
 #include <unistd.h>
 #include <sys/types.h>
#include <sys/wait.h>
int main()
{
    //cout << "exec begin" << endl;

    pid_t id = fork();
    if(id == 0)
    {
        cout << "exec begin" << endl;

        //execl("/usr/bin/ls","ls","-a","-l",nullptr);
        //execlp("ls","ls","-a","-l",nullptr);

        // char* const argv[] = {(char*)"ls",(char*)"-a",(char*)"-l",nullptr};
        // execvp("ls",argv);
        char *const env[] = {(char*)"haha = hehe",(char*)"PATH=/",nullptr};
        execle("./mytest","mytest",nullptr,env);

        //execv("/usr/bin/ls",argv);

        cout << "exec end" << endl;
        exit(-1);
    }
    pid_t rid = waitpid(id,nullptr,0);
    if(rid > 0)
    {
        cout << "等待成功" << endl;
    }
    return 0;
}

// #include <iostream>
// using namespace std;
// #include <stdlib.h>
// #include <sys/types.h>
// #include <sys/wait.h>
// #include <unistd.h>

// #define NUM 4

// typedef void(*func_t)();
// func_t tasks[NUM];

// void printLog()
// {
//     cout << "this is a log print task" << endl;
// }

// void printNet()
// {
//     cout << "this is a net task" << endl;
// }

// void printNPC()
// {
//     cout << "this is a flush NPC" << endl;
// }

// void initTask()
// {
//     tasks[0] = printLog;
//     tasks[1] = printNet;
//     tasks[2] = printNPC;
//     tasks[3] = nullptr;
// }

// void excuteTask()
// {
//     for(int i = 0; tasks[i]; i++)
//         tasks[i]();
// }

// int main()
// {
//     initTask();
//     pid_t id = fork();
//     if(id == 0)
//     {
//         int ret = 2;
//         int cnt = 5;
//         while(cnt)
//         {
//             cout << "我是子进程 pid：" << getpid();
//             cout << " ppid:" << getppid() << endl;
//             sleep(1);
//             cnt--;
//         }
//         exit(100);
//     }

//     int ret = 0;
//     while(true)
//     {
//         pid_t rid = waitpid(id,&ret,WNOHANG);
//         if(rid > 0)
//         {
//             cout << "等待成功，ret：" << ret;
//             cout << " 信号部分：" << (ret & 0x7F);
//             cout << " 退出码：" << ((ret >> 8)&0xff) << endl;
//             break;
//         }
//         else if(rid == 0)
//         {
//             cout << "子进程还在运行"   << endl;
//             cout << "---------------任务开始--------------" << endl;
//             excuteTask();
//             cout << "---------------任务结束--------------" << endl;
//         }
//         else
//         {
//             perror("waitpid");
//             break;
//         }
//         sleep(1);
//     }

//     // int ret = 0;
//     // pid_t rid = waitpid(id,&ret,0);
//     // if(rid > 0)
//     // {
//     //     cout << "等待成功，ret：" << ret;
//     //     cout << " 信号部分：" << (ret & 0x7F);
//     //     cout << " 退出码：" << ((ret >> 8)&0xff) << endl;
//     // }
//     return 0;
// }

